同行布局 SameLine
有时候你想让两个控件并排站,比如"标签 + 输入框"、"确定 + 取消按钮"。SameLine 就是干这个的——它让后续控件与当前控件保持在同一行。
一句话理解
BeginSameLine() 的意思是:"下一个控件,别换行,跟我挤一挤。"
函数原型
void BeginSameLine();
void EndSameLine();
这对函数没有参数,也没有返回值。它们只是标记一段"同行布局"的开始和结束。
使用场景
场景一:按钮并排
static HX::ButtonProfile bp;
if (HX::Button(HXStr("确定"), bp)) {
// 处理确定
}
HX::BeginSameLine();
if (HX::Button(HXStr("取消"), bp)) {
// 处理取消
}
HX::EndSameLine();
场景二:标签 + 输入框
static HX::TextInputProfile tip;
HX::Text(HXStr("用户名:"));
HX::BeginSameLine();
HX::TextInput(tip);
HX::EndSameLine();
场景三:多个小控件并排
HX::Button(HXStr("⏮"), bp);
HX::BeginSameLine();
HX::Button(HXStr("⏸"), bp);
HX::BeginSameLine();
HX::Button(HXStr("⏭"), bp);
HX::EndSameLine();
SameLine 的排列顺序
BeginSameLine() 影响的是它之后的那个控件。也就是说,先写一个控件 A,然后调用 BeginSameLine(),再写控件 B,B 就会和 A 排在同一行。
如果你需要三个并排,要在第二个和第三个前面都加 BeginSameLine()。
注意事项
不支持 SameLine 的控件
Dropdown(下拉框)等部分控件不支持 SameLine 布局。如果你强行把它们放进 SameLine,可能会出现布局错乱或交互异常。
遇到这种需求时,建议改用 BeginHorizontal() / EndHorizontal(),它的兼容性和可控性更强。
与 Horizontal 的区别
SameLine:轻量级,适合单行的临时并排。Horizontal:区域级布局,适合一整块区域内的横向排列,支持更复杂的子控件宽度分配。
如果你只是想让两个按钮挨在一起,SameLine 更省事;如果你要做一个完整的工具栏或表单行,用 Horizontal。
完整示例代码
#include <include/hex.h>
#include <include/impl/EasyX/hex_impl_easyx.h>
int main() {
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
HX::HXInitForEasyX();
HX::SetBuffer(GetWorkingImage());
BeginBatchDraw();
static HX::WindowProfile wp;
wp.Size = {450, 400};
static HX::ButtonProfile bp;
static HX::TextInputProfile tip;
static float val = 0.5f;
static HX::SliderProfile1f sp;
while (true) {
HX::HXBegin();
ExMessage msg;
while (peekmessage(&msg)) {
HX::PushMessage(HX::GetHXMessage(&msg));
}
HX::Window(HXStr("SameLine 演示"), wp);
// ---------- 按钮组 ----------
HX::Text(HXStr("操作按钮:"));
if (HX::Button(HXStr("新建"), bp)) {
// 新建逻辑
}
HX::BeginSameLine();
if (HX::Button(HXStr("打开"), bp)) {
// 打开逻辑
}
HX::BeginSameLine();
if (HX::Button(HXStr("保存"), bp)) {
// 保存逻辑
}
HX::EndSameLine();
HX::Separator();
// ---------- 标签 + 输入框 ----------
HX::Text(HXStr("服务器地址:"));
HX::BeginSameLine();
HX::TextInput(tip);
HX::EndSameLine();
HX::Text(HXStr("端口号:"));
HX::BeginSameLine();
HX::SetNextItemWidth(100);
HX::TextInput(tip);
HX::EndSameLine();
HX::Separator();
// ---------- 媒体控制按钮 ----------
HX::Button(HXStr("⏮ 上一首"), bp);
HX::BeginSameLine();
HX::Button(HXStr("⏸ 暂停"), bp);
HX::BeginSameLine();
HX::Button(HXStr("⏭ 下一首"), bp);
HX::EndSameLine();
HX::End();
HX::Render();
FlushBatchDraw();
Sleep(16);
}
closegraph();
return 0;
}
小建议
SameLine 是写 UI 时最高频用到的布局技巧之一。记住口诀:写一个控件,调用 BeginSameLine,再写下一个。别搞反了顺序!